﻿#define _CRT_SECURE_NO_WARNINGS 1

//描述：输入一个整数n ，输出该数32位二进制表示中1的个数。其中负数用补码表示
//数据范围：−2147483648<=n<=2147483647
//示例1:
	//输入：10
	//返回值：2
	//说明：十进制中10的32位二进制表示为0000 0000 0000 0000 0000 0000 0000 1010，其中有两个1。
//示例2
	//输入：-1
	//返回值：32
	//说明：负数使用补码表示，-1的32位二进制表示为1111 1111 1111 1111 1111 1111 1111 1111，其中32个1

#include <stdio.h>

/*不太好
int NumberOf1(int n)
//改成(unsigned int n)，才能处理负数
{
	int count = 0;
	while (n)
	{
		if (n % 2 == 1)
			count++;
		n = n / 2;
	}
	return count;
}
*/

int NumberOf1(int n)
{
	int i = 0;
	int count = 0;
	for (i = 0; i < 32; i++)
	{
		if (((n >> i) & 1) == 1)
			count++;
	}
	return count;
}

/*更牛逼，有几个1算几次
int NumberOf1(int n)
{
	int count = 0;
	while (n)
	{
		n = n & (n - 1);
		count++;
	}
	return count;
}
*/

int main()
{
	int n = 0;
	scanf("%d", &n);
	int ret = NumberOf1(n);
	printf("%d\n", ret);

	return 0;
}